#!/bin/bash

# - 获取IP地址
fip_addr(){
	echo "IP地址：$(ip r |grep -o -P '(?<=link src )[0-9.]+(?= metric)')"
}

# - cpu使用率
fcpu_use() {
    # 读取初始CPU时间（user nice system idle ...）
    read -r _ user nice system idle rest < /proc/stat
    total1=$((user + nice + system + idle))
    idle1=$idle
    # 等待1秒
    sleep 1
    # 读取1秒后CPU时间
    read -r _ user nice system idle rest < /proc/stat
    total2=$((user + nice + system + idle))
    idle2=$idle
    # 计算空闲率
    total=$((total2 - total1))
    idle=$((idle2 - idle1))
    idle_use=$(( 100 - idle * 100 / total ))
    echo "CPU使用率: $idle_use%"
}

# - 内存使用率
fmem_free_use(){
	# 提取总内存（单位：KB）
	mem_total=$(grep MemTotal /proc/meminfo | awk '{print $2}')
	# 提取空闲内存（单位：KB）
	mem_free=$(grep MemFree /proc/meminfo | awk '{print $2}')
	# 计算使用率（整数百分比）
	free_use=$(( 100 - mem_free * 100 / mem_total ))
	echo "内存使用率(物理): $free_use%"
}

fmem_avail_use(){
	# 提取总内存（单位：KB）
	mem_total=$(grep MemTotal /proc/meminfo | awk '{print $2}')
	# 提取空闲内存（单位：KB）
	mem_available=$(grep MemAvailable /proc/meminfo | awk '{print $2}')
	free_use=$(( 100 - mem_available * 100 / mem_total ))  # 包含缓存的可用内存空闲率
	echo "内存使用率（可回收）: $free_use%"
}

# - 磁盘使用率
fdisk_use(){
	df -h -x tmpfs  -x overlay -x devicemapper |awk '{print $2,$5,$6}'
}

# - 网络使用
fnet_use(){
	source /tmp/get-net.out
	if [ -n "$eth0_rx" ]
	then
		now_rx=$(grep 'eth0' /proc/net/dev |awk '{print $2}')
		now_tx=$(grep 'eth0' /proc/net/dev |awk '{print $10}')
		rx=$(( now_rx - eth0_rx ))
		tx=$(( now_tx - eth0_tx ))
		rx_fmt=$(numfmt --to=iec --suffix=B $rx)
		tx_fmt=$(numfmt --to=iec --suffix=B $tx)
		eth0_rx=${now_rx}
		eth0_tx=${now_tx}
		
		echo "1天内发送：$rx_fmt
1天内接收：$tx_fmt"
fi

	eth0_rx=$(grep 'eth0' /proc/net/dev |awk '{print $2}')
	eth0_tx=$(grep 'eth0' /proc/net/dev |awk '{print $10}')
	echo "eth0_rx=${eth0_rx}" > /tmp/get-net.out
	echo "eth0_tx=${eth0_tx}" >> /tmp/get-net.out
}

# - 获取CPU温度
fcpu_temp(){
	cpu_temp=$(cat /sys/class/thermal/thermal_zone0/temp)
	echo "温度：$((cpu_temp/1000))℃"
}

# - 获取系统负载
fload_avg(){
	echo "系统负载：$(uptime |grep -o -P '(?<=load average:).*'	)"
}

# - 获取启动时长
fuptime(){
	echo "系统启动时长：$(uptime |grep -o -P '(?<=up ).*?(?=,)')"
	echo "开机时间：$(date -d "$(uptime -s)" +"%T 日期：%F")"
}

# - 获取高CPU进程
ftop_cpu(){
	ps -eo pcpu,pid,comm --sort=-pcpu |head -n 4
}

# - 获取高内存进程
ftop_mem(){
	ps -eo pmem,pid,comm --sort=-pmem |head -n 4
}

# - 写入文本，并整理格式，让钉钉可以识别
(fip_addr ; fcpu_use ; fmem_free_use ; fmem_avail_use ; echo "磁盘信息" ; fdisk_use ;echo "网络信息" ; fnet_use ; fcpu_temp ; fload_avg ; fuptime ; echo "CPU进程" ; ftop_cpu ; echo "内存进程" ; ftop_mem) > /tmp/ding_msg.out
sed -i ':a;N;$!ba;s/\n/\\n/g' /tmp/ding_msg.out

# - 最终发送成功
/usr/bin/ding_to 16619954624 "$(cat /tmp/ding_msg.out)"